import vue from "@vitejs/plugin-vue";
import vueJsx from "@vitejs/plugin-vue-jsx";
import autoprefixer from "autoprefixer";
import path from "path";
import { defineConfig } from "vite";
import viteCompression from "vite-plugin-compression";

export default defineConfig({
  base: "./", // 开发或生产环境服务的公共基础路径 ,https://vitejs.bootcss.com/guide/build.html#public-base-path
  build: {
    outDir: "dist", // 打包后的文件名称,
    minify: "terser",
    terserOptions: {
      // 生产环境下移除 debugger console
      compress: {
        drop_console: false,
        drop_debugger: true
      }
    },
    rollupOptions: {
      output: {
        // manualChunks(id) {
        //     if (id.includes('node_modules')) {
        //         return id.toString().split('node_modules/')[1].split('/')[0].toString();
        //     }
        // }
        manualChunks: {
          lodash: ["lodash"]
        }
      }
    }
  },
  plugins: [
    vue(),
    // 支持 jsx 写法
    vueJsx({
      transformOn: true,
      mergeProps: true
    }),
    // gzip压缩 生产环境生成 .gz 文件
    viteCompression({
      verbose: true,
      disable: false,
      threshold: 10240,
      algorithm: "gzip",
      ext: ".gz"
    })
  ],

  resolve: {
    extensions: [".ts", ".tsx", ".js", ".jsx", ".json"], // vite 后缀查找
    alias: {
      "@": path.resolve(__dirname, "src") // 别名路径
    }
  },

  css: {
     postcss: {
      plugins: [autoprefixer],
      // plugins: [postcssImport, tailwindcss],
    },
    preprocessorOptions: {
      scss: {
        additionalData: '@import "@/assets/style/global.scss";' // 配置全局 scss
      }
    }
  },

  optimizeDeps: {
    include: [] // 第三方库
  },

  //启动服务配置
  server: {
    open: true, // 是否自动打开浏览器
    https: false, // 是否开启https
    port: 3000, // 端口号
    host: true, // 指定服务器应该监听哪个 IP 地址。 如果将此设置为 0.0.0.0 或者 true 将监听所有地址，包括局域网和公网地址。
    hmr: {
      // 热替换
      overlay: true // 是否开启错误的阴影层
    },
    proxy: {
      "/api": {
        target: "", // 后台接口,
        changeOrigin: true,
        secure: false, // 如果是 https 接口需要配置这个参数
        // ws:false,//websocket
        rewrite: (path) => path.replace(/^\/api/, "") // 路径重写
      }
    }
  }
});
